package be.groept.ace.cursusplanning.view;

import java.awt.Color;
import java.awt.Container;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;

import be.groept.ace.cursusplanning.controller.IOverzichtController;
import be.groept.ace.cursusplanning.controller.OpstartController;
import be.groept.ace.cursusplanning.model.containers.Cursisten;

public abstract class OverzichtFrame extends JFrame {
	
	protected OpstartController opstartController;
	protected IOverzichtController overzichtController;
	
	protected JLabel lblBetreffendePersonen, lblOverzicht;
	protected JComboBox cmbBetreffendePersonen;
	protected JTextArea txtOverzicht;
	protected JCheckBox chkAllePersonen;
	
	protected Cursisten cursisten;
	protected String overzichtLijstLabel, betreffendePersonenLabel;
	
	/**
	 * Constructor - Instellen van het abstracte "OverzichtFrame"
	 * @param opstartcontroller
	 */
	public OverzichtFrame(OpstartController opstartcontroller, IOverzichtController overzichtController){
		
		super();
		this.opstartController = opstartcontroller;
		this.overzichtController = overzichtController;
		
		Container container = getContentPane();
		container.setBackground(Color.YELLOW);
		container.setLayout(null);
		
		//Selecteer betreffende persoon
		toonBetreffendePersonenLabel();
		toonBetreffendePersonenCombobox();
		toonAllePersonenCheckBox();
		
		//Weergave van de opgelijste onderdelen
		toonOverzichtLabel();
		toonOverzichtText();
		
		//Toevoegen van de onderdelen aan het frame
		container.add(lblBetreffendePersonen);
		container.add(cmbBetreffendePersonen);
		container.add(lblOverzicht);
		container.add(txtOverzicht);
		container.add(chkAllePersonen);
		
		/**
		 * Er voor zorgen dat de combobox met personen niet meer actief is bij het aanvinken van "Iedereen"
		 */
		chkAllePersonen.addItemListener(new ItemListener() {
			@Override
			public void itemStateChanged(ItemEvent arg0) {
			if (chkAllePersonen.isSelected()) {cmbBetreffendePersonen.setEnabled(false);}
			else {cmbBetreffendePersonen.setEnabled(true);}
			}
		});
		
		/**
		 * Het hoofdmenu weergeven bij het sluiten van het venster
		 */
		this.addWindowListener(new WindowAdapter()  
		{	          
 			public void windowClosing(WindowEvent e){  
 				setVisible(false);             
 				toonMenu();
 			}	
		});
		
		this.setSize(1000, 750);
	}
	
	/**
	 * Weergeven van de betreffende personen (label en combobox)
	 */
	protected abstract void toonBetreffendePersonenLabel();
	protected abstract void toonBetreffendePersonenCombobox();

	/**
	 * Weergeven van het overzicht (label en lijst)
	 */
	protected abstract void toonOverzichtLabel();
	protected abstract void toonOverzichtText();
	
	/**
	 * Weergeven van de checkbox voor het selecteren van "Iedereen"
	 */
	protected abstract void toonAllePersonenCheckBox();
	
	/**
	 * Weergeven van het hoofdmenu
	 */
	private void toonMenu(){
		opstartController.execute();
	}

}
